#define E_UART0
#include "H/UART0.H"

/*****************************************************
*函数名称：void UART0_Init(uint R_UART0_BPS)
*函数功能：串口0初始化
*入口参数：uint R_UART0_BPS 串口波特率
          OSCD=2T  波特率范围7813 ~115200bsp  
          OSCD=4T  波特率范围3907 ~115200bsp  （默认）
          OSCD=8T  波特率范围1954 ~115200bsp
          OSCD=16T 波特率范围 977 ~115200bsp  
*出口参数：void
*****************************************************/
void UART0_Init(ulong R_UART0_BPS)
{
    uint    i=0;
    #if     D_OSCD==1
    i=((32>>1)*1000000L/R_UART0_BPS)-1;
    #elif   D_OSCD==2
    i=((32>>2)*1000000L/R_UART0_BPS)-1;
    #elif   D_OSCD==3	
    i=((32>>3)*1000000L/R_UART0_BPS)-1;
    #elif   D_OSCD==4
    i=((32>>4)*1000000L/R_UART0_BPS)-1;
    #endif
    //波特率公式=CLKPER/(UATXSRE+1)；CLKPER=RC32M/OSCD
    UAT0SREL=(uchar)i;
    UAT0SREH=(uchar)(i>>8); //波特率	
    UART0_TX_OUT;       //TX输出口
    UART0_TX=1;         //TX输出高;
    UART0_TX_OD_OFF;    //TX开漏不使能
    UART0_TX_PH_OFF;    //TX上拉不使能
    UART0_TX_PD_OFF;    //TX下拉不使能

    UAT0CON=UAT0EN_EN|UAT0SM(D_UAT0SM)|UAT0TB8(0);//UART使能|8位异步方式|第9位清0
    UAT0TIE=1;          //TX使能中断
//    EA=1;             //全局中断使能 

    R_UART0_SEND_LENGTH=0; 
    F_UART0_SEND=0;//=1发送完成
}

/*****************************************************
*函数名称：void UART0_MULTIBYTE_SEND(uchar *P_DATA,uchar R_LENGTH)
*函数功能：串口多字节发送
*入口参数：uchar *P_DATA 发送数据首地址
          uchar R_LENGTH 发送数据长度
*出口参数：void
*****************************************************/
void UART0_MULTIBYTE_SEND(uchar *P_DATA,uchar R_LENGTH)
{    
    P_UART0_SEND_DATA=P_DATA;
    UAT0SBUF=*P_UART0_SEND_DATA++;
    R_UART0_SEND_LENGTH=R_LENGTH-1;
    F_UART0_SEND=0;     
}
/*****************************************************
*函数名称：void UART0_TX_INT()
*函数功能：串口发送中断执行函数
*入口参数：void
*出口参数：void
*****************************************************/
void UART0_TX_INT()
{  
    if(R_UART0_SEND_LENGTH==0)
    {
       //数据发送完成
        F_UART0_SEND=1;
    }
    else
    {
        UAT0SBUF=*P_UART0_SEND_DATA++;
        R_UART0_SEND_LENGTH--;
    } 
}

